home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / skykid.c < prev    next >
C/C++ Source or Header  |  2000-04-04  |  21KB  |  567 lines

  1. /***************************************************************************
  2.  
  3. Dragon Buster (c) Namco 1984
  4. Sky Kid    (c) Namco 1985
  5.  
  6. Driver by Manuel Abadia <manu@teleline.es>
  7.  
  8. ***************************************************************************/
  9.  
  10. #include "driver.h"
  11. #include "vidhrdw/generic.h"
  12. #include "cpu/m6800/m6800.h"
  13. #include "cpu/m6809/m6809.h"
  14.  
  15. static unsigned char *sharedram;
  16. extern unsigned char *skykid_textram, *spriteram, *skykid_videoram;
  17.  
  18. /* from vidhrdw/skykid.c */
  19. int skykid_vh_start( void );
  20. READ_HANDLER( skykid_videoram_r );
  21. WRITE_HANDLER( skykid_videoram_w );
  22. WRITE_HANDLER( skykid_scroll_x_w );
  23. WRITE_HANDLER( skykid_scroll_y_w );
  24. WRITE_HANDLER( skykid_flipscreen_w );
  25. void skykid_vh_screenrefresh( struct osd_bitmap *bitmap,int full_refresh );
  26. void drgnbstr_vh_screenrefresh( struct osd_bitmap *bitmap,int full_refresh );
  27. void skykid_vh_convert_color_prom(unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  28.  
  29.  
  30. static int irq_disabled = 1;
  31. static int inputport_selected;
  32.  
  33. static int skykid_interrupt( void )
  34. {
  35.     if (!irq_disabled)
  36.         return M6809_INT_IRQ;
  37.     else
  38.         return ignore_interrupt();
  39. }
  40.  
  41. static WRITE_HANDLER( skykid_irq_ctrl_w )
  42. {
  43.     irq_disabled = offset;
  44. }
  45.  
  46. static WRITE_HANDLER( inputport_select_w )
  47. {
  48.     if ((data & 0xe0) == 0x60)
  49.         inputport_selected = data & 0x07;
  50.     else if ((data & 0xe0) == 0xc0)
  51.     {
  52.         coin_lockout_global_w(0,~data & 1);
  53.         coin_counter_w(0,data & 2);
  54.         coin_counter_w(1,data & 4);
  55.     }
  56. }
  57.  
  58. #define reverse_bitstrm(data) ((data & 0x01) << 4) | ((data & 0x02) << 2) | (data & 0x04) \
  59.                             | ((data & 0x08) >> 2) | ((data & 0x10) >> 4)
  60.  
  61. static READ_HANDLER( inputport_r )
  62. {
  63.     int data = 0;
  64.  
  65.     switch (inputport_selected){
  66.         case 0x00:    /* DSW B (bits 0-4) */
  67.             data = ~(reverse_bitstrm(readinputport(1) & 0x1f)); break;
  68.         case 0x01:    /* DSW B (bits 5-7), DSW A (bits 0-1) */
  69.             data = ~(reverse_bitstrm((((readinputport(1) & 0xe0) >> 5) | ((readinputport(0) & 0x03) << 3)))); break;
  70.         case 0x02:    /* DSW A (bits 2-6) */
  71.             data = ~(reverse_bitstrm(((readinputport(0) & 0x7c) >> 2))); break;
  72.         case 0x03:    /* DSW A (bit 7), DSW C (bits 0-3) */
  73.             data = ~(reverse_bitstrm((((readinputport(0) & 0x80) >> 7) | ((readinputport(2) & 0x0f) << 1)))); break;
  74.         case 0x04:    /* coins, start */
  75.             data = ~(readinputport(3)); break;
  76.         case 0x05:    /* 2P controls */
  77.             data = ~(readinputport(5)); break;
  78.         case 0x06:    /* 1P controls */
  79.             data = ~(readinputport(4)); break;
  80.         default:
  81.             data = 0xff;
  82.     }
  83.  
  84.     return data;
  85. }
  86.  
  87. static WRITE_HANDLER( skykid_lamps_w )
  88. {
  89.     osd_led_w(0, (data & 0x08) >> 3);
  90.     osd_led_w(1, (data & 0x10) >> 4);
  91. }
  92.  
  93. static WRITE_HANDLER( skykid_halt_mcu_w )
  94. {
  95.     if (offset == 0){
  96.         cpu_set_reset_line(1,PULSE_LINE);
  97.         cpu_set_halt_line( 1, CLEAR_LINE );
  98.     }
  99.     else{
  100.         cpu_set_halt_line( 1, ASSERT_LINE );
  101.     }
  102. }
  103.  
  104. READ_HANDLER( skykid_sharedram_r )
  105. {
  106.     return sharedram[offset];
  107. }
  108. WRITE_HANDLER( skykid_sharedram_w )
  109. {
  110.     sharedram[offset] = data;
  111. }
  112.  
  113. WRITE_HANDLER( skykid_bankswitch_w )
  114. {
  115.     int bankaddress;
  116.     unsigned char *RAM = memory_region(REGION_CPU1);
  117.  
  118.     bankaddress = 0x10000 + (offset ? 0 : 0x2000);
  119.     cpu_setbank(1,&RAM[bankaddress]);
  120. }
  121.  
  122.  
  123. static struct MemoryReadAddress skykid_readmem[] =
  124. {
  125.     { 0x0000, 0x1fff, MRA_BANK1 },                /* banked ROM */
  126.     { 0x2000, 0x2fff, skykid_videoram_r },        /* Video RAM (background) */
  127.     { 0x4000, 0x47ff, MRA_RAM },                /* video RAM (text layer) */
  128.     { 0x4800, 0x5fff, MRA_RAM },                /* RAM + Sprite RAM */
  129.     { 0x6800, 0x68ff, namcos1_wavedata_r },        /* PSG device, shared RAM */
  130.     { 0x6800, 0x6bff, skykid_sharedram_r },        /* shared RAM with the MCU */
  131.     { 0x7800, 0x7800, watchdog_reset_r },        /* watchdog reset */
  132.     { 0x8000, 0xffff, MRA_ROM },                /* ROM */
  133.     { -1 }
  134. };
  135.  
  136. static struct MemoryWriteAddress skykid_writemem[] =
  137. {
  138.     { 0x0000, 0x1fff, MWA_ROM },                /* banked ROM */
  139.     { 0x2000, 0x2fff, skykid_videoram_w, &skykid_videoram },/* Video RAM (background) */
  140.     { 0x4000, 0x47ff, MWA_RAM, &skykid_textram },/* video RAM (text layer) */
  141.     { 0x4800, 0x5fff, MWA_RAM },                /* RAM + Sprite RAM */
  142.     { 0x6000, 0x60ff, skykid_scroll_y_w },        /* Y scroll register map */
  143.     { 0x6200, 0x63ff, skykid_scroll_x_w },        /* X scroll register map */
  144.     { 0x6800, 0x68ff, namcos1_wavedata_w, &namco_wavedata },/* PSG device, shared RAM */
  145.     { 0x6800, 0x6bff, skykid_sharedram_w, &sharedram },    /* shared RAM with the MCU */
  146.     { 0x7000, 0x7800, skykid_irq_ctrl_w },        /* IRQ control */
  147.     { 0x8000, 0x8800, skykid_halt_mcu_w },        /* MCU control */
  148.     { 0x9000, 0x9800, skykid_bankswitch_w },    /* Bankswitch control */
  149.     { 0xa000, 0xa001, skykid_flipscreen_w },    /* flip screen */
  150.     { 0x8000, 0xffff, MWA_ROM },                /* ROM */
  151.     { -1 }
  152. };
  153.  
  154. static struct MemoryReadAddress mcu_readmem[] =
  155. {
  156.     { 0x0000, 0x001f, hd63701_internal_registers_r },/* internal registers */
  157.     { 0x0080, 0x00ff, MRA_RAM },                    /* built in RAM */
  158.     { 0x1000, 0x10ff, namcos1_wavedata_r },            /* PSG device, shared RAM */
  159.     { 0x1100, 0x113f, MRA_RAM },                    /* PSG device */
  160.     { 0x1000, 0x13ff, skykid_sharedram_r },            /* shared RAM with the 6809 */
  161.     { 0x8000, 0xbfff, MRA_ROM },                    /* MCU external ROM */
  162.     { 0xc000, 0xc800, MRA_RAM },                    /* RAM */
  163.     { 0xf000, 0xffff, MRA_ROM },                    /* MCU internal ROM */
  164.     { -1 }
  165. };
  166.  
  167. static struct MemoryWriteAddress mcu_writemem[] =
  168. {
  169.     { 0x0000, 0x001f, hd63701_internal_registers_w },/* internal registers */
  170.     { 0x0080, 0x00ff, MWA_RAM },                    /* built in RAM */
  171.     { 0x1000, 0x10ff, namcos1_wavedata_w },            /* PSG device, shared RAM */
  172.     { 0x1100, 0x113f, namcos1_sound_w, &namco_soundregs },/* PSG device */
  173.     { 0x1000, 0x13ff, skykid_sharedram_w },            /* shared RAM with the 6809 */
  174.     { 0x2000, 0x2000, MWA_NOP },                    /* ??? */
  175.     { 0x4000, 0x4000, MWA_NOP },                    /* ??? */
  176.     { 0x6000, 0x6000, MWA_NOP },                    /* ??? */
  177.     { 0x8000, 0xbfff, MWA_ROM },                    /* MCU external ROM */
  178.     { 0xc000, 0xc800, MWA_RAM },                    /* RAM */
  179.     { 0xf000, 0xffff, MWA_ROM },                    /* MCU internal ROM */
  180.     { -1 }
  181. };
  182.  
  183. static struct IOReadPort mcu_readport[] =
  184. {
  185.     { HD63701_PORT1, HD63701_PORT1, inputport_r },            /* input ports read */
  186.     { -1 }    /* end of table */
  187. };
  188.  
  189. static struct IOWritePort mcu_writeport[] =
  190. {
  191.     { HD63701_PORT1, HD63701_PORT1, inputport_select_w },    /* input port select */
  192.     { HD63701_PORT2, HD63701_PORT2, skykid_lamps_w },        /* lamps */
  193.     { -1 }    /* end of table */
  194. };
  195.  
  196. INPUT_PORTS_START( skykid )
  197.     PORT_START    /* DSW A */
  198.     PORT_SERVICE( 0x01, IP_ACTIVE_HIGH )
  199.     PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coin_A ) )
  200.     PORT_DIPSETTING(    0x06, DEF_STR( 3C_1C ) )
  201.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
  202.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  203.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_2C ) )
  204.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
  205.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  206.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  207.     PORT_DIPNAME( 0x10, 0x00, "Round Skip" )
  208.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  209.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  210.     PORT_DIPNAME( 0x20, 0x00, "Freeze screen" )
  211.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  212.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  213.     PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
  214.     PORT_DIPSETTING(    0xc0, DEF_STR( 3C_1C ) )
  215.     PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )
  216.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  217.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  218.  
  219.     PORT_START    /* DSW B */
  220.     PORT_DIPNAME( 0x03, 0x00, DEF_STR( Lives ) )
  221.     PORT_DIPSETTING(    0x00, "3" )
  222.     PORT_DIPSETTING(    0x01, "2" )
  223.     PORT_DIPSETTING(    0x02, "1" )
  224.     PORT_DIPSETTING(    0x03, "5" )
  225.     PORT_DIPNAME( 0x0c, 0x00, DEF_STR( Bonus_Life ) )
  226.     PORT_DIPSETTING(    0x00, "30k, 90k" )
  227.     PORT_DIPSETTING(    0x04, "20k, 80k" )
  228.     PORT_DIPSETTING(    0x08, "30k every 90k" )
  229.     PORT_DIPSETTING(    0x0c, "20k every 80k" )
  230.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
  231.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  232.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  233.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
  234.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  235.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  236.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  237.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  238.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  239.     PORT_DIPNAME( 0x80, 0x80, DEF_STR( Cabinet ) )
  240.     PORT_DIPSETTING(    0x80, DEF_STR( Upright ) )
  241.     PORT_DIPSETTING(    0x00, DEF_STR( Cocktail ) )
  242.  
  243.     PORT_START    /* DSW C */
  244.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER1 )
  245.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
  246.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
  247.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  248.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  249.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  250.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  251.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  252.     PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
  253.  
  254.     PORT_START    /* IN 0 */
  255.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 )
  256.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
  257.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
  258.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
  259.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
  260.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  261.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  262.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  263.  
  264.     PORT_START    /* IN 1 */
  265.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  266.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  267.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  268.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY )
  269.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 )
  270.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  271.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  272.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  273.  
  274.     PORT_START    /* IN 2 */
  275.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_8WAY | IPF_PLAYER2 )
  276.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_8WAY | IPF_PLAYER2 )
  277.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_8WAY | IPF_PLAYER2 )
  278.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_8WAY | IPF_PLAYER2 )
  279.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
  280.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  281.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  282.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  283. INPUT_PORTS_END
  284.  
  285. INPUT_PORTS_START( drgnbstr )
  286.     PORT_START    /* DSW A */
  287.     PORT_SERVICE( 0x01, IP_ACTIVE_HIGH )
  288.     PORT_DIPNAME( 0x06, 0x00, DEF_STR( Coin_A ) )
  289.     PORT_DIPSETTING(    0x06, DEF_STR( 3C_1C ) )
  290.     PORT_DIPSETTING(    0x02, DEF_STR( 2C_1C ) )
  291.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  292.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_2C ) )
  293.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Demo_Sounds ) )
  294.     PORT_DIPSETTING(    0x08, DEF_STR( Off ) )
  295.     PORT_DIPSETTING(    0x00, DEF_STR( On ) )
  296.     PORT_DIPNAME( 0x10, 0x00, "Round Skip" )
  297.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  298.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  299.     PORT_DIPNAME( 0x20, 0x00, "Freeze screen" )
  300.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  301.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  302.     PORT_DIPNAME( 0xc0, 0x00, DEF_STR( Coin_B ) )
  303.     PORT_DIPSETTING(    0xc0, DEF_STR( 3C_1C ) )
  304.     PORT_DIPSETTING(    0x40, DEF_STR( 2C_1C ) )
  305.     PORT_DIPSETTING(    0x00, DEF_STR( 1C_1C ) )
  306.     PORT_DIPSETTING(    0x80, DEF_STR( 1C_2C ) )
  307.  
  308.     PORT_START    /* DSW B */
  309.     PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown ) )
  310.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  311.     PORT_DIPSETTING(    0x01, DEF_STR( On ) )
  312.     PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown ) )
  313.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  314.     PORT_DIPSETTING(    0x02, DEF_STR( On ) )
  315.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown ) )
  316.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  317.     PORT_DIPSETTING(    0x04, DEF_STR( On ) )
  318.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  319.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  320.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  321.     PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown ) )
  322.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  323.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  324.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown ) )
  325.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  326.     PORT_DIPSETTING(    0x20, DEF_STR( On ) )
  327.     PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown ) )
  328.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  329.     PORT_DIPSETTING(    0x40, DEF_STR( On ) )
  330.     PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown ) )
  331.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  332.     PORT_DIPSETTING(    0x80, DEF_STR( On ) )
  333.  
  334.     PORT_START    /* DSW C */
  335.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER1 )
  336.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_BUTTON2 | IPF_PLAYER2 )
  337.     PORT_DIPNAME( 0x04, 0x00, DEF_STR( Cabinet ) )
  338.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  339.     PORT_DIPSETTING(    0x04, DEF_STR( Cocktail ) )
  340.     PORT_DIPNAME( 0x08, 0x00, DEF_STR( Unknown ) )
  341.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  342.     PORT_DIPSETTING(    0x08, DEF_STR( On ) )
  343.     PORT_BIT( 0xf0, IP_ACTIVE_HIGH, IPT_UNUSED )
  344.  
  345.     PORT_START    /* IN 0 */
  346.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_SERVICE1 )
  347.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN1 )
  348.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
  349.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_START1 )
  350.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_START2 )
  351.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  352.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  353.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  354.  
  355.     PORT_START    /* IN 1 */
  356.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY )
  357.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY )
  358.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY )
  359.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY )
  360.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER1 )
  361.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  362.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  363.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  364.  
  365.     PORT_START    /* IN 2 */
  366.     PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_JOYSTICK_LEFT  | IPF_4WAY | IPF_PLAYER2 )
  367.     PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_JOYSTICK_RIGHT | IPF_4WAY | IPF_PLAYER2 )
  368.     PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_JOYSTICK_DOWN  | IPF_4WAY | IPF_PLAYER2 )
  369.     PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_JOYSTICK_UP    | IPF_4WAY | IPF_PLAYER2 )
  370.     PORT_BIT( 0x10, IP_ACTIVE_HIGH, IPT_BUTTON1 | IPF_PLAYER2 )
  371.     PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_UNUSED )
  372.     PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNUSED )
  373.     PORT_BIT( 0x80, IP_ACTIVE_HIGH, IPT_UNUSED )
  374. INPUT_PORTS_END
  375.  
  376.  
  377. static struct GfxLayout text_layout =
  378. {
  379.     8,8,        /* 8*8 characters */
  380.     512,        /* 512 characters */
  381.     2,            /* 2 bits per pixel */
  382.     { 0, 4 },    /* the bitplanes are packed in the same byte */
  383.     { 8*8, 8*8+1, 8*8+2, 8*8+3, 0, 1, 2, 3 },
  384.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8 },
  385.     16*8        /* every char takes 16 consecutive bytes */
  386. };
  387.  
  388. static struct GfxLayout tile_layout =
  389. {
  390.     8,8,        /* 8*8 characters */
  391.     512,        /* 512 characters */
  392.     2,            /* 2 bits per pixel */
  393.     { 0, 4 },
  394.     { 0, 1, 2, 3, 8+0, 8+1, 8+2, 8+3 },
  395.     { 0*8, 2*8, 4*8, 6*8, 8*8, 10*8, 12*8, 14*8 },
  396.     16*8        /* every char takes 16 consecutive bytes */
  397. };
  398.  
  399. static struct GfxLayout sprite_layout1 =
  400. {
  401.     16,16,           /* 16*16 sprites */
  402.     128,               /* 128 sprites */
  403.     3,              /* 3 bits per pixel */
  404.     { 0x4000*8+4, 0, 4 },
  405.     { 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3,
  406.             16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8+0, 24*8+1, 24*8+2, 24*8+3 },
  407.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  408.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  409.     64*8    /* every sprite takes 64 bytes */
  410. };
  411.  
  412. static struct GfxLayout sprite_layout2 =
  413. {
  414.     16,16,           /* 16*16 sprites */
  415.     128,               /* 128 sprites */
  416.     3,              /* 3 bits per pixel */
  417.     { 0x4000*8, 0x2000*8, 0x2000*8+4 },
  418.     { 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3,
  419.             16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8+0, 24*8+1, 24*8+2, 24*8+3 },
  420.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  421.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  422.     64*8    /* every sprite takes 64 bytes */
  423. };
  424.  
  425. static struct GfxLayout sprite_layout3 =
  426. {
  427.     16,16,           /* 16*16 sprites */
  428.     128,               /* 128 sprites */
  429.     3,              /* 3 bits per pixel */
  430.     { 0x8000*8, 0x6000*8, 0x6000*8+4 },
  431.     { 0, 1, 2, 3, 8*8, 8*8+1, 8*8+2, 8*8+3,
  432.             16*8+0, 16*8+1, 16*8+2, 16*8+3, 24*8+0, 24*8+1, 24*8+2, 24*8+3 },
  433.     { 0*8, 1*8, 2*8, 3*8, 4*8, 5*8, 6*8, 7*8,
  434.             32*8, 33*8, 34*8, 35*8, 36*8, 37*8, 38*8, 39*8 },
  435.     64*8    /* every sprite takes 64 bytes */
  436. };
  437.  
  438. static struct GfxDecodeInfo gfxdecodeinfo[] =
  439. {
  440.     { REGION_GFX1, 0, &text_layout,        0, 64 },
  441.     { REGION_GFX2, 0, &tile_layout,        64*4, 128 },
  442.     { REGION_GFX3, 0, &sprite_layout1,    64*4+128*4, 64 },
  443.     { REGION_GFX3, 0, &sprite_layout2,    64*4+128*4, 64 },
  444.     { REGION_GFX3, 0, &sprite_layout3,    64*4+128*4, 64 },
  445.     {-1 }
  446. };
  447.  
  448.  
  449. static struct namco_interface namco_interface =
  450. {
  451.     49152000/2048,         /* 24000 Hz */
  452.     8,                    /* number of voices */
  453.     100,                /* playback volume */
  454.     -1,                    /* memory region */
  455.     0                    /* stereo */
  456. };
  457.  
  458. static struct MachineDriver machine_driver_skykid =
  459. {
  460.     /* basic machine hardware */
  461.     {
  462.         {
  463.             CPU_M6809,
  464.             49152000/32,    /* ??? */
  465.             skykid_readmem,skykid_writemem,0,0,
  466.             skykid_interrupt,1
  467.         },
  468.         {
  469.             CPU_HD63701,    /* or compatible 6808 with extra instructions */
  470.             49152000/32,    /* ??? */
  471.             mcu_readmem,mcu_writemem,mcu_readport,mcu_writeport,
  472.             interrupt,1
  473.         }
  474.     },
  475.     60,DEFAULT_REAL_60HZ_VBLANK_DURATION,
  476.     100,    /* we need heavy synch */
  477.     0,
  478.  
  479.     /* video hardware */
  480.     36*8, 28*8, { 0*8, 36*8-1, 0*8, 28*8-1 },
  481.     gfxdecodeinfo,
  482.     256, 64*4+128*4+64*8,
  483.     skykid_vh_convert_color_prom,
  484.  
  485.     VIDEO_TYPE_RASTER,
  486.     0,
  487.     skykid_vh_start,
  488.     0,
  489.     skykid_vh_screenrefresh,
  490.  
  491.     /* sound hardware */
  492.     0,0,0,0,
  493.     {
  494.         {
  495.             SOUND_NAMCO,
  496.             &namco_interface
  497.         }
  498.     }
  499. };
  500.  
  501.  
  502. ROM_START( skykid )
  503.     ROM_REGION( 0x14000, REGION_CPU1 )    /* 6809 code */
  504.     ROM_LOAD( "sk2-6c.bin",   0x08000, 0x4000, 0xea8a5822 )
  505.     ROM_LOAD( "sk1-6b.bin",   0x0c000, 0x4000, 0x7abe6c6c )
  506.     ROM_LOAD( "sk3-6d.bin",   0x10000, 0x4000, 0x314b8765 )    /* banked ROM */
  507.  
  508.     ROM_REGION(  0x10000 , REGION_CPU2 ) /* MCU code */
  509.     ROM_LOAD( "sk4-3c.bin",   0x8000, 0x2000, 0xa460d0e0 )    /* subprogram for the MCU */
  510.     ROM_LOAD( "sk1-mcu.bin",  0xf000, 0x1000, 0x6ef08fb3 )    /* MCU internal code */
  511.                                                             /* Using Pacland code (probably similar) */
  512.  
  513.     ROM_REGION( 0x02000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  514.     ROM_LOAD( "sk6-6l.bin",   0x00000, 0x2000, 0x58b731b9 )    /* chars */
  515.  
  516.     ROM_REGION( 0x02000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  517.     ROM_LOAD( "sk5-7e.bin",   0x00000, 0x2000, 0xc33a498e )
  518.  
  519.     ROM_REGION( 0x0a000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  520.     ROM_LOAD( "sk9-10n.bin",  0x00000, 0x4000, 0x44bb7375 )    /* sprites */
  521.     ROM_LOAD( "sk7-10m.bin",  0x04000, 0x4000, 0x3454671d )
  522.     /* empty space to decode the sprites as 3bpp */
  523.  
  524.     ROM_REGION( 0x0700, REGION_PROMS )
  525.     ROM_LOAD( "sk1-2n.bin",   0x0000, 0x0100, 0x0218e726 )    /* red component */
  526.     ROM_LOAD( "sk2-2p.bin",   0x0100, 0x0100, 0xfc0d5b85 )    /* green component */
  527.     ROM_LOAD( "sk3-2r.bin",   0x0200, 0x0100, 0xd06b620b )    /* blue component */
  528.     ROM_LOAD( "sk-5n.bin",    0x0300, 0x0200, 0xc697ac72 )    /* tiles lookup table */
  529.     ROM_LOAD( "sk-6n.bin",    0x0500, 0x0200, 0x161514a4 )    /* sprites lookup table */
  530. ROM_END
  531.  
  532.  
  533. ROM_START( drgnbstr )
  534.     ROM_REGION( 0x14000, REGION_CPU1 ) /* 6809 code */
  535.     ROM_LOAD( "6c.bin",        0x08000, 0x04000, 0x0f11cd17 )
  536.     ROM_LOAD( "6b.bin",        0x0c000, 0x04000, 0x1c7c1821 )
  537.     ROM_LOAD( "6d.bin",        0x10000, 0x04000, 0x6da169ae )    /* banked ROM */
  538.  
  539.     ROM_REGION(  0x10000 , REGION_CPU2 ) /* MCU code */
  540.     ROM_LOAD( "3c.bin",        0x8000, 0x02000, 0x8a0b1fc1 )    /* subprogram for the MCU */
  541.     ROM_LOAD( "pl1-mcu.bin",0xf000,    0x01000, 0x6ef08fb3 )    /* The MCU internal code is missing */
  542.                                                             /* Using Pacland code (probably similar) */
  543.  
  544.     ROM_REGION( 0x02000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  545.     ROM_LOAD( "6l.bin",        0x00000, 0x2000, 0xc080b66c )    /* tiles */
  546.  
  547.     ROM_REGION( 0x02000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  548.     ROM_LOAD( "7e.bin",        0x00000, 0x2000, 0x28129aed )
  549.  
  550.     ROM_REGION( 0x0a000, REGION_GFX3 | REGIONFLAG_DISPOSE )
  551.     ROM_LOAD( "10n.bin",    0x00000, 0x4000, 0x11942c61 )    /* sprites */
  552.     ROM_LOAD( "10m.bin",    0x04000, 0x4000, 0xcc130fe2 )
  553.         /* empty space to decode the sprites as 3bpp */
  554.  
  555.     ROM_REGION( 0x0700, REGION_PROMS )
  556.     ROM_LOAD( "2n.bin",        0x00000, 0x0100, 0x3f8cce97 )    /* red component */
  557.     ROM_LOAD( "2p.bin",        0x00100, 0x0100, 0xafe32436 )    /* green component */
  558.     ROM_LOAD( "2r.bin",        0x00200, 0x0100, 0xc95ff576 )    /* blue component */
  559.     ROM_LOAD( "db1-4.5n",    0x00300, 0x0200, 0xb2180c21 )    /* tiles lookup table */
  560.     ROM_LOAD( "db1-5.6n",    0x00500, 0x0200, 0x5e2b3f74 )    /* sprites lookup table */
  561. ROM_END
  562.  
  563.  
  564.  
  565. GAME( 1985, skykid,   0, skykid, skykid,   0, ROT0, "Namco", "Sky Kid" )
  566. GAME( 1984, drgnbstr, 0, skykid, drgnbstr, 0, ROT0, "Namco", "Dragon Buster" )
  567.